package com.qf.advcie;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/*
 *@Description:
 *@author:刘哥
 *@Date:86180 2022/8/27 9:29
 */
//表名这是一个aop类(切面注解(由切点@Pointcut和通知@Before组成))
@Aspect
@Component
public class Advice {
//    配置切点
    @Pointcut("execution(* com.qf.service.impl.*.*(..))")
    public void qiedian(){

    }
//    前置通知
//    @Before("qiedian()")
//    public void before(){
//        System.out.println("添加用户进入准备工作");
//    }
////    后置通知(有无异常都执行)
//    @After("qiedian()")
//    public void After(){
//        System.out.println("添加用户完成");
//    }
////    后置通知(有异常时不执行)
//    @AfterReturning("qiedian()")
//    public void AfterReturning(){
//        System.out.println("添加用户正在进行中");
//    }
////    异常通知(只有发生异常时才执行)
//    @AfterThrowing("qiedian()")
//    public void throwing(){
//        System.out.println("添加用户出现异常");
//    }

    @Around("qiedian()")
    public Object around(ProceedingJoinPoint joinPoint){
        Object proceed=null;
        try {
            System.out.println("添加用户正在进行准备");
//            动态代理调用方法
            proceed= joinPoint.proceed();
            System.out.println("添加用户正在进行中");
        } catch (Throwable e) {
            System.out.println("添加用户发生异常");
        }finally {
            System.out.println("添加用户已完成");
        }


        return proceed;
    }

}
